Integration Testing এর মাধ্যমে API টেস্টিং

Web Development - এএসপি ডট (ASP.Net) - Unit Testing এবং Integration Testing |
3
3

Integration Testing হল সফটওয়্যার টেস্টিং এর একটি ধাপ, যেখানে বিভিন্ন মডিউল বা সিস্টেম অংশ একত্রে কাজ করছে কিনা তা যাচাই করা হয়। ASP.Net অ্যাপ্লিকেশনগুলির জন্য, API টেস্টিং বিশেষভাবে গুরুত্বপূর্ণ, কারণ এটি সিস্টেমের একক ইউনিটগুলোকে একত্রে পরীক্ষা করে তাদের ইন্টিগ্রেশন এবং কার্যকারিতা যাচাই করে।

Integration Testing এর মাধ্যমে API টেস্টিং, ASP.Net Core এর মাধ্যমে বিভিন্ন ওয়েব API এর কার্যকারিতা পরীক্ষা করতে সহায়তা করে, যেমন একটি RESTful API এর সঠিক রেসপন্স, ডাটাবেস থেকে ডেটা রিট্রিভাল, এবং একাধিক সিস্টেমের মধ্যে যোগাযোগ সঠিকভাবে হচ্ছে কিনা।


১. Integration Testing এর প্রয়োজনীয়তা

Integration Testing API এর জন্য প্রয়োজনীয় কারণগুলো:

  • ডেটাবেসের সাথে সংযোগ পরীক্ষা: API যখন ডেটাবেসের সাথে যোগাযোগ করে, তখন ডেটার সঠিকতা এবং কার্যকারিতা নিশ্চিত করতে Integration Testing অপরিহার্য।
  • বিভিন্ন সেবা এবং মডিউলের মধ্যে ইন্টারঅ্যাকশন: API অনেক সময় অন্যান্য মডিউল এবং সেবা যেমন, মেসেজ কিউ, থার্ড-পার্টি সিস্টেম ইত্যাদির সাথে ইন্টিগ্রেটেড থাকে। Integration Testing এ সেগুলোর সংযোগ পরীক্ষা করা হয়।
  • কোডের অখণ্ডতা এবং কর্মক্ষমতা: একাধিক সিস্টেম একসাথে কাজ করছে কিনা, এবং সেগুলোর মধ্যে কোনো সমস্যা হচ্ছে কিনা তা যাচাই করা যায়।

২. ASP.Net Core API এর জন্য Integration Testing কিভাবে করা যায়

ASP.Net Core এ API Integration Testing করার জন্য সাধারণত xUnit, NUnit, বা MSTest টেস্ট ফ্রেমওয়ার্ক ব্যবহার করা হয়। ASP.Net Core এর জন্য TestServer এবং HttpClient ব্যবহারের মাধ্যমে API এর কার্যকারিতা পরীক্ষা করা যায়।

১. প্রয়োজনীয় NuGet প্যাকেজ ইনস্টল করা

Integration Testing করতে হলে, প্রথমে আপনার টেস্ট প্রজেক্টে কিছু NuGet প্যাকেজ ইনস্টল করতে হবে:

dotnet add package Microsoft.AspNetCore.Mvc.Testing
dotnet add package xUnit
dotnet add package Microsoft.EntityFrameworkCore.InMemory
dotnet add package xunit.runner.visualstudio
  • Microsoft.AspNetCore.Mvc.Testing: ASP.Net Core অ্যাপ্লিকেশন টেস্ট করার জন্য সাহায্যকারী প্যাকেজ।
  • xUnit: টেস্টিং ফ্রেমওয়ার্ক।
  • Microsoft.EntityFrameworkCore.InMemory: ইন-মেমরি ডাটাবেস ব্যবহারের জন্য।

২. Integration Test প্রজেক্ট তৈরি করা

  1. Test Project তৈরি করুন: আপনার ASP.Net Core API এর জন্য একটি আলাদা Integration Test প্রজেক্ট তৈরি করতে হবে। এটি আপনার মূল API প্রজেক্টের বাইরে থাকবে।
  2. TestServer এবং HttpClient ব্যবহার করুন: API এর HTTP রিকোয়েস্ট এবং রেসপন্স চেক করার জন্য TestServer এবং HttpClient ব্যবহার করা হয়।
public class MyApiIntegrationTest : IClassFixture<WebApplicationFactory<Startup>>
{
    private readonly HttpClient _client;
    private readonly WebApplicationFactory<Startup> _factory;

    public MyApiIntegrationTest(WebApplicationFactory<Startup> factory)
    {
        _factory = factory;
        _client = factory.CreateClient();
    }

    [Fact]
    public async Task Get_Products_ReturnsSuccessStatusCode()
    {
        // Arrange
        var url = "/api/products";

        // Act
        var response = await _client.GetAsync(url);

        // Assert
        response.EnsureSuccessStatusCode();  // 200-299 HTTP status code
    }

    [Fact]
    public async Task Post_Product_ReturnsCreatedAtActionResult()
    {
        // Arrange
        var product = new { Name = "New Product", Price = 100 };
        var content = new StringContent(JsonConvert.SerializeObject(product), Encoding.UTF8, "application/json");
        var url = "/api/products";

        // Act
        var response = await _client.PostAsync(url, content);

        // Assert
        response.EnsureSuccessStatusCode();
        var result = await response.Content.ReadAsStringAsync();
        Assert.Contains("New Product", result);
    }
}

এখানে, WebApplicationFactory ASP.Net Core অ্যাপ্লিকেশনকে টেস্ট সার্ভারে শুরু করে, এবং HttpClient ব্যবহার করে HTTP রিকোয়েস্ট পাঠানো হয়।

  • [Fact] অ্যাট্রিবিউট xUnit এর টেস্ট মেথড চিহ্নিত করে।
  • response.EnsureSuccessStatusCode() ব্যবহার করে টেস্ট নিশ্চিত করা হয় যে, সার্ভার থেকে সঠিক রেসপন্স (২০০-২৯৯ HTTP status code) পেয়েছি।

৩. In-Memory ডাটাবেস ব্যবহার করে টেস্টিং

ডাটাবেসের সাথে ইন্টিগ্রেশন টেস্ট করতে হলে, সাধারণত In-Memory Database ব্যবহার করা হয়, যাতে আসল ডাটাবেসে কোন পরিবর্তন না হয়।

উদাহরণ:

public class ProductControllerIntegrationTests : IClassFixture<WebApplicationFactory<Startup>>
{
    private readonly HttpClient _client;
    private readonly WebApplicationFactory<Startup> _factory;

    public ProductControllerIntegrationTests(WebApplicationFactory<Startup> factory)
    {
        _factory = factory;
        _client = factory.WithWebHostBuilder(builder =>
        {
            builder.ConfigureServices(services =>
            {
                // Replace real DbContext with in-memory provider
                services.AddDbContext<ApplicationDbContext>(options =>
                    options.UseInMemoryDatabase("TestDatabase"));
            });
        }).CreateClient();
    }

    [Fact]
    public async Task Get_Products_ReturnsOkResult()
    {
        // Arrange
        var url = "/api/products";

        // Act
        var response = await _client.GetAsync(url);

        // Assert
        response.EnsureSuccessStatusCode();
        var products = await response.Content.ReadAsStringAsync();
        Assert.Contains("Product", products);
    }
}

এখানে, In-Memory Database ব্যবহার করে ডাটাবেস অপারেশন পরীক্ষিত হচ্ছে, যা টেস্টের জন্য উপযুক্ত এবং দ্রুত।


৪. API Endpoints টেস্ট করা

Integration Testing এর মাধ্যমে API Endpoints যেমন GET, POST, PUT, DELETE এর কার্যকারিতা পরীক্ষা করা হয়।

  • GET রিকোয়েস্ট: সার্ভারে ডেটা রিট্রিভ করা হয়।
  • POST রিকোয়েস্ট: নতুন ডেটা সার্ভারে পাঠানো হয়।
  • PUT রিকোয়েস্ট: বিদ্যমান ডেটা আপডেট করা হয়।
  • DELETE রিকোয়েস্ট: ডেটা সার্ভার থেকে মুছে ফেলা হয়।

সারাংশ

Integration Testing এর মাধ্যমে ASP.Net API টেস্টিং সঠিকভাবে করা সম্ভব। TestServer এবং HttpClient ব্যবহার করে API এর কার্যকারিতা পরীক্ষা করা হয়। এর মাধ্যমে API এর সমস্ত endpoint, ডেটাবেস ইন্টিগ্রেশন, এবং অন্যান্য সিস্টেমের সাথে সংযোগ সঠিকভাবে কাজ করছে কিনা তা যাচাই করা সম্ভব।

Content added By
Promotion